package com.example.farmeri.http;

import com.example.farmeri.pojo.Farm;
import com.example.farmeri.pojo.FarmDataT;
import com.example.farmeri.pojo.Messages;
import com.example.farmeri.pojo.Role;
import com.example.farmeri.pojo.User;
import com.example.farmeri.tools.ResponseUtils;
import com.example.farmeri.ui.login.model.LoginData;
import com.example.farmeri.pojo.Roles;
import com.example.farmeri.ui.users.model.UserList;

import java.util.List;

import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.core.Observable;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;

public interface API {

    /**
     * 登录注册 start
     */
    @POST("login")
    Observable<ResponseUtils<User>> login(@Body RequestBody body);

    @POST("register")
    Observable<ResponseUtils<User>> register(@Body RequestBody body);


    /**
     * 消息数据
     * */
    //获取指定用户未读消息
    @POST("message/new")
    Observable<ResponseUtils<Messages>> getMessages(@Body RequestBody body);

    //获取指定用户所有消息
    @POST("message/getAllNews")
    Observable<ResponseUtils<Messages>> getAllMessages(@Body RequestBody body);

    @POST("message/add")
    Observable<ResponseUtils<String>> addMessage(@Body RequestBody body);

    @POST("message/read")
    Observable<ResponseUtils<String>> readMessage(@Body RequestBody body);

    @POST("message/delete")
    Observable<ResponseUtils<String>> deleteMessage(@Body RequestBody requestBody);
    
    /**
     * 访问策略
     * */
    //分页方式获取访问策略列表
    @GET("role/getAllRole")
    Observable<ResponseUtils<Roles>> getRoles(@Query("page")String page, @Query("limit")String limit);

    //添加策略
    @POST("role/addRole")
    Observable<ResponseUtils<Role>> addRole(@Body RequestBody body);

    //删除策略
    @POST("role/delRole")
    Observable<ResponseUtils<Role>> delRole(@Body RequestBody body);

    //查询指定用户策略
    @GET("role/getRole")
    Observable<ResponseUtils<Role>> getRole(@Query("id")String id);

    //修改指定策略
    @POST("role/update")
    Observable<ResponseUtils<Role>> updateRole(@Body RequestBody body);


    /**
     * 农田数据
     */
    //查询指定用户的所有农田信息
    @GET("farm/getAllFarmsByUser")
    Observable<ResponseUtils<List<Farm>>> getAllFarmsByUser(@Query("id")String  id, @Query("page")String page, @Query("limit")String limit);

    //查询指定农田的所有数据
    @GET("farm/FarmData")
    Observable<ResponseUtils<FarmDataT>> getFarmData(@Query("farmId")String farmId, @Query("beginDate")String beginDate, @Query("endDate")String endDate);

    //修改指定农田的所有数据
    @POST("farm/edit")
    Observable<ResponseUtils<Role>> editFarmData(@Body RequestBody body);

    //添加农田信息
    @POST("farm/add")
    Observable<ResponseUtils<Role>> addFarmData(@Body RequestBody body);

    //删除农田信息
    @POST("farm/delete")
    Observable<ResponseUtils<Role>> deleteFarmData(@Body RequestBody body);


    /**
     * 数据统计
     */
    //获取登录统计
    @POST("datacharts")
    Observable<ResponseUtils<LoginData>> getLoginData(@Body RequestBody body);


    /**
     * 用户模块
     */
    //获取所有用户
    @GET("list")
    Observable<ResponseUtils<UserList>> getAllUser(@Query("page")Integer page, @Query("limit")Integer limit);

    //锁定用户
    @GET("lock")
    Observable<ResponseUtils> lockUser(@Query("id")String id);

    //查询用户
    @GET("getUser")
    Observable<ResponseUtils<User>> viewUser(@Query("id")String id);

    //获取所有用户
    @GET("delete")
    Observable<ResponseUtils<Role>> deleteUser(@Query("id") String id);

    //修改用户介绍
    @POST("updateRemarks")
    Observable<ResponseUtils<Role>> updateRemarks(@Body RequestBody body);

    //获取所有用户
    @POST("updateNickName")
    Observable<ResponseUtils<Role>> updateNickName(@Body RequestBody body);

    //修改用户密码
    @POST("alertPwd")
    Observable<ResponseUtils> alertPwd(@Body RequestBody body);

    //修改用户信息
    @POST("updateUserInfo")
    Observable<ResponseUtils> updateUserInfo(@Body RequestBody body);

    //修改用户头像
    @POST("uploadIcon")
    Observable<ResponseUtils> uploadIcon(@Body RequestBody body);

    /**
     * 管理员模块
     */
    //获取管理员类型及数量
    @POST("manager/getUserWithRole")
    Observable<ResponseUtils<Role>> getUserWithRole(@Body RequestBody body);

    //获取农田主的所有管理员
    @POST("manager/getSingleUserWithRole")
    Observable<ResponseUtils<Role>> getSingleUserWithRole(@Body RequestBody body);

    //删除管理员
    @POST("manager/deleteFarmManager")
    Observable<ResponseUtils<String>> deleteFarmManager(@Body RequestBody body);

    //添加管理员
    @POST("manager/addFarmManager")
    Observable<ResponseUtils<String>> addFarmManager(@Body RequestBody body);

    /**
     * 信誉值模块
     */
    //减少信誉值
    @POST("reduceCredit")
    Observable<ResponseUtils> reduceCredit(@Body RequestBody body);


}
